/*
 * @Description: 异步&事件循环
 * @Author: gn
 * @Date: 2024-06-03 15:28:32
 * @LastEditors: sevenFunuction 1593215788@qq.com
 * @LastEditTime: 2024-06-04 18:55:51
 * /
 
/*
 * 例1
 * errorShow: 1 2 4 3
 * show: 1 2 4
 * 构造函数内部代码立即执行，then方法内部代码放入微任务队列中，
 * 因此1 2立即输出，因为构造函数中没有异步操作未返回resolve所以3不会输出,4输出
 */
// const promise = new Promise((resolve, reject) => {
//   console.log(1);
//   console.log(2);
// });

// promise.then(() => {
//   console.log(3);
// });

// console.log(4);

/*
 * 例2
 * 错误输出: 1 4 3
 * 输出：1 2 4 3
 * 构造函数内部代码立即执行, then方法将内部代码放入微任务队列中。
 * resolve不会阻塞代码的执行只会将代码状态由pending状态转变为fulfilled状态，
 * 因为1 2先输出，4是宏任务，3是微任务，宏任务先于微任务执行，所以4先输出，3后输出
 */
// const promise = new Promise((resolve, reject) => {
//   console.log(1);
//   resolve();
//   console.log(2);
// });

// promise.then(() => {
//   console.log(3);
// });

// console.log(4);


/**
 * 例3
 * 此题需要注意，promise1中调用resolve，promise的状态发生改变，直接答应会显示对应返回结果
 * 但是promise2中调用then，promise2的状态不会发生改变，所以不会打印对应结果
 * 先执行构造函数中的代码打印1，再执行同步代码[ promise1 ]，[ promise2 ]，宏任务代码执行完毕，执行微任务代码输出[ res ]
 */
const promise1 = new Promise((resolve, reject) => {
  console.log('[ 1 ] >', 1)
  resolve(2)
})

const promise2 = promise1.then(res => {
  console.log('[ res ] >', res)
})


console.log('[ promise1 ] >', promise1)
console.log('[ promise2 ] >', promise2)
